#include <stdio.h>
#include <stdlib.h>
#include "magasin.h"
#include "configuration.h"
#include "gestion_magasin.h"
#include "string.h"

void extraire_magasin(magasin_db m[], int *n)
{
        FILE *f;
        f = fopen(FICHIER_MAGASIN,"r");
        if ( f != NULL)
        {
                debug("Chargement des donnees des produits");
                while ( fscanf(f,"%d %s %s %d",&m[*n].id_p, m[*n].nom_p, m[*n].type_p,&m[*n].q) != EOF)

                {
                        debug("les donnees du '%d %s %s %d' sont chargees",m[*n].id_p, m[*n].nom_p, m[*n].type_p, m[*n].q);
                        *n = *n + 1;
                }
                fclose(f);
        }
        else
                debug("Impossible de charger les donnees des produits");

}


void exporter_magasin(magasin_db m[], int n)
{
        int i=0;
        FILE *f;

        debug("Exportation des produits");
        debug("le nombre de produits a exporter : %d",n);
        remove(FICHIER_MAGASIN);
	f = fopen(FICHIER_MAGASIN,"w");
	if ( f != NULL)
        {
                        for ( i = 0; i < n ; i++)
                        {
                                debug("Exportation des produits '%s %s' ", m[i].nom_p,m[i].type_p);
                                fprintf(f,"\n%d %s %s %d",m[i].id_p,m[i].nom_p,m[i].type_p,m[i].q);
                        }
                        fclose(f);
         }
         else
                        debug("Impossible d'ajouter '%s'",m[i].nom_p);

        debug("Exportation fini");
}


void saisir_produit (magasin_db magasin[],magasin_db *m,int n)
{
	int existe=0;
	int i=0;

	do
	{
		existe =0;
		printf("		[+] Entrer l'id: ");
		scanf("%d",&m->id_p);
		for ( i = 0; i < n ; i++ )
		{
			if (magasin[i].id_p == m->id_p)
			{
				existe =1;
				printf ("		[!] Cet id deja existe\n");
			}

		}
	}while ((existe ==1)  );
        printf("                [+] Entrer le nom: ");
        fflush(stdin);
        scanf("%s",m->nom_p);

	printf("		[+] Entrer le type: ");
	fflush(stdin);
	scanf("%s",m->type_p);

	printf("		[+] Entrer la quantité ");
	fflush(stdin);
	scanf("%d",&m->q);
}

void ajouter_produit(magasin_db magasin[], int *n)
{
        magasin_db m;
        printf("[!] Ajout d'un produit\n");
        saisir_produit(magasin,&m,*n);
        magasin[*n] = m;
        printf("[!] Produit ajoute\n");
        *n = *n + 1;
	exporter_magasin(magasin,*n);
}

void ajouter_produit_gtk(magasin_db magasin[],magasin_db m, int *n)
{
        printf("[!] Ajout d'un produit\n");
        magasin[*n] = m;
        printf("[!] Produit ajoute\n");
        *n = *n + 1;
}


void afficher_en_tete_produit()
{
        printf("|");
        dessiner_colonne_d(5,"ID");
        dessiner_colonne_d(10,"Nom");
        dessiner_colonne_d(10,"Type");
        dessiner_colonne_d(10,"Quantite");
        printf("\n");
}
void afficher_produit(magasin_db m)
{
	printf("|");
	dessiner_colonne_d(5,"%d",m.id_p);
	dessiner_colonne_d(10,"%s",m.nom_p);
	dessiner_colonne_d(10,"%s",m.type_p);
	dessiner_colonne_d(10,"%d",m.q);
	printf("\n");
}

void afficher_magasin(magasin_db magasin[], int n)
{
	int i = 0;
        printf("[!] Le nombre des produits: %d\n",n);
        if ( n <= 0)
                printf("[!] La liste est vide\n");
        else
        {
                dessiner_ligne(39);
                afficher_en_tete_produit();
                for (i=0;i<n;i++)
                {
                        afficher_produit(magasin[i]);
                }
                dessiner_ligne(39);
        }
}

void supprimer_produit (magasin_db magasin[],int id,int  *n)
{
	int pos = -1;
	int k = 0;
	while (( pos == -1) && ( k < *n ))
	{
		if (magasin[k].id_p == id)
			pos = k;
		else
			k++;
	}
	if ( pos == -1 )
		printf("[!] Le produit n'existe pas\n");
	else
	{
		for ( k = pos;k<=*n;k++)
		{
			magasin[k] = magasin[k+1];
		}
		exporter_magasin(magasin,*n);
		*n = *n-1;
		printf("[!] Le produit est supprime\n");
	}
}

void supprimer_produit_gtk (magasin_db magasin[],int id,int  *n, char msg[])
{
	int pos = -1;
	int k = 0;
	while (( pos == -1) && ( k < *n ))
	{
		if (magasin[k].id_p == id)
			pos = k;
		else
			k++;
	}
	if ( pos == -1 )
		strcpy(msg,"Le produit n'existe pas");
	else
	{
		for ( k = pos;k<=*n;k++)
		{
			magasin[k] = magasin[k+1];
		}
		*n = *n-1;
		strcpy(msg,"Le produit est supprime");
	}
}

int recherche_produit(magasin_db magasin[],int identifiant,int n)
{
        int pos,k;
        k=0;
	pos=0;

        while (( pos == -1) && ( k < n ))
        {
                if (magasin[k].id_p == identifiant)
                        pos = k;
                else
                        k++;
        }
        if ( pos == -1 )
                printf("[!] Le produit n'existe pas\n");
	return pos;
}



void init_magasin_db(magasin_db magasin[], int *n)
{
        int k;
	k = *n-1;

        while ( k > -1)
        {
		printf("[!] Suppression du produit '%s %s'\n",magasin[k].nom_p,magasin[k].type_p);
		supprimer_produit(magasin,magasin[k].id_p,n);
		k = *n - 1;
	}
	printf("[!] Le magasin est vide\n");
	remove(FICHIER_MAGASIN);
}

void init_magasin_db_gtk(magasin_db magasin[], int *n, char msg[])
{
        int k;
		k = *n-1;
		char smsg[50];

        while ( k > -1)
        {
			sprintf(smsg,"[!] Suppression du produit '%s %s'\n",magasin[k].nom_p,magasin[k].type_p);
			supprimer_produit(magasin,magasin[k].id_p,n);
			k = *n - 1;
			strcpy(msg,smsg);
		}
		strcpy(msg,"Le magasin est vide\n");
		remove(FICHIER_MAGASIN);
}

void affiche_choix__produit(char variable[])
{
        dessiner_ligne(46);
        dessiner_milieu(46,"1/ Modifier le nom du %s",variable);
	printf("\n");
        dessiner_milieu(46,"2/ Modifier la quantite du %s",variable);
        printf("\n");
        dessiner_milieu(46,"3/ Modifier le type du %s",variable);
        printf("\n");
	dessiner_milieu(46,"0/ Retour");
        printf("\n");
        dessiner_ligne(46);
}

void modifier_produit_gtk(magasin_db magasin[],magasin_db m, int id, int n, char msg[])
{
	int choix;
	
	int i = -1;
	
	i = recherche_produit(magasin,id,n);
	if ( i != -1 )
	{    
		magasin[i] = m;
		strcpy(msg,"le produit est modifié");
		exporter_magasin(magasin,n);
	}
	else
	{
		strcpy(msg,"le produit n'existe pas");
	}
    
}

void modifier_produit(magasin_db magasin[], int n)
{
	int choix;
	int id;
	affiche_choix__produit("produit");

	printf("> ");
	scanf("%d",&choix);
	int i = -1;
	
	afficher_magasin(magasin,n);
	printf("[!] Entrez l'ID: ");
	scanf("%d",&id);

	i = recherche_produit(magasin,id,n);
	if (i != -1)
	{
	switch (choix) 
	{
	case 1: {printf("		[+] Vous avez choisi de modifier le nom du produit: ");
		fflush(stdin);
		scanf("%s",magasin[i].nom_p);}
	break;		


	case 2: {printf("		[+] Vous avez choisi de modifier la quantite du produit ");
		
		scanf("%d",&magasin[i].q);}
	break;		

	case 3: {printf("		[+] Vous avez choisi de modifier le type du produit ");
		
		scanf("%s",magasin[i].type_p);}
	break;		

	

	case 0: {}
	break;


	default: {printf("\nmauvais choix");} 
	}
	}
}
